In the embedded device environment, a hardware independent processor such as a Java Virtual Machine is often installed on the device to allow a program to be downloaded and executed on the device. Such a system allows a program written in a hardware independent language such as Sun MicroSystem""s Java(copyright) to be downloaded to any hardware supporting the Java(copyright) environment in order to customize it for a particular use. This customization is often referred to as the xe2x80x9cpersonalityxe2x80x9d of the device. Multiple applications may be running in concert within an embedded device to define the device""s personality. In this way the device can dynamically be made to function in different unique ways. For example, an embedded device such as a refrigerator may be customized to automatically track its contents. Just as the types of food and naming conventions of similar foods may differ from culture to culture, the embedded device refrigerator may be customized to the particular culture of the users by downloading a new personality describing the food types and naming conventions to the Java enabled embedded refrigerator device.
In the embedded device domain, a hardware independent processor such as a Java(copyright) Virtual Machine is installed on the device to allow applications to be downloaded and executed on the device. The Java(copyright) language provides basic capabilities to build programs to dynamically load new programs. However, the Java(copyright) language does not provide implementations of program loaders, nor capabilities to manage programs once loaded. The Java(copyright) language also does not provide a means of downloading and managing applications within a memory constrained embedded device.
Several existing Java technologies support a program loader type of functionality. Sun Microsystems""s Servlet API allows a Java(copyright) enabled Web server to dynamically extend the capabilities of the server. The Servlet API was mainly created to replace the typical CGI functionality in web servers. The benefits of servlets over CGI type programs include platform independence, reusability (the ability to reuse Java classes through object oriented techniques), performance efficiency (the configurable startup modes of Servlet which allows the same servlet instance to handle many requests (as opposed to the requirement of creating a new process for each call to a CGI script)), and management efficiency (Sun""s Java based web server provides a Java admin applet which easily administers the addition of new servlet classes, and the starting and stopping of servlets).
The Servlet API defines a lifecycle for a servlet by mandating that all servlets implement three methods: init( ), service( ), and destroy( ). The init( ) method is called when the servlet is invoked for first time; the service( ) method is called to handle each request from a client; and the destroy( ) method is called when the servlet is being stopped (i.e. web server shutdown). The Servlet API does not directly support memory management or provide a public package for managing servlets.
Hewlett Packard""s Embedded Java Lab SmallWeb provides a web based interface to Java based objects executing in a JVM. SmallWeb can load objects as needed, and provides a means for objects to export their functionality (through method calls) to web browsers. SmallWeb does not explicitly provide stopping of application objects or memory management features. In addition, SmallWeb usually requires a file system, and for some embedded environments the overhead requirements of SmallWeb may be too large.
One problem of using Java(copyright) in many embedded domains is the non-deterministic aspects of the Java(copyright) memory subsystem. The non-deterministic memory management scheme of the Java(copyright) language allows the reclamation of un-referenced objects through a garbage collector method gc( ); however, the garbage collector does not specify how or when these objects are reclaimed. Native applications typically force garbage collection to occur by calling the Java(copyright) Runtime class gc( ) method. If the JVM runs out of memory, an OutOfMemoryError error is thrown. Although not having to manage memory is a benefit of the Java language, most embedded applications need tighter control over how memory is managed than currently provided in the Java(copyright) language. The tighter control is needed because some embedded applications must continue to execute in low memory situations. This is typically dealt with by implementing a memory manager in the native non-Java embedded applications to ensure that enough memory remains free in order to continue executing.
Accordingly, a need exists for a universal method for downloading to, and controlling the lifetimes of applications in, a Java enabled embedded device. A need also exists for a memory management handler which handles low- or no-memory situations detected during the execution of applications on the device, and which frees up memory according to a priority-based algorithm.
The present invention is a novel system and method for managing the download and lifecycle of an application in a memory constrained embedded device environment. A Java based Application Manager controls the downloading, execution, and caching of Java applications running within a single Java Virtual Machine (JVM) installed on the embedded device. A network capable Application Program Interface (API) is specified which provides functionality for loading class files, starting, initializing and stopping the execution of applications, and memory management in a Java(copyright) enabled embedded device. The invention allows embedded devices to be easily re-programmed and managed independently of the type of hardware the embedded device uses.